package org.dicr.gui;

import java.net.*;

import javax.swing.*;

import org.dicr.event.*;

/***********************************************************************************************************************
 * @author Igor Tarasov, me@dicr.euromb.com
 * @version 020927
 **********************************************************************************************************************/
public class SplashScreen extends JWindow implements Runnable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	protected long delay = 5000;

	protected JLabel label = new JLabel();

	/*******************************************************************************************************************
	 * Конструктор
	 ******************************************************************************************************************/
	protected SplashScreen() {
		try {
			jbInit();
		} catch (Exception ex) {
			DicrExceptionHandler.handleException(ex, this);
		}
	}

	/*******************************************************************************************************************
	 * Инициализация
	 ******************************************************************************************************************/
	private void jbInit() {
		this.getContentPane().add(this.label);
	}

	/*******************************************************************************************************************
	 * Устанавливает иконку
	 ******************************************************************************************************************/
	public void setIcon(Icon icon) {
		this.label.setIcon(icon);
		this.recenter();
	}

	/*******************************************************************************************************************
	 * Устанавливает иконку с изображением
	 ******************************************************************************************************************/
	public void setIcon(URL imageURL) {
		ImageIcon icon = new ImageIcon(imageURL);
		setIcon(icon);
	}

	/*******************************************************************************************************************
	 * Возвращает иконку
	 ******************************************************************************************************************/
	public Icon getIcon() {
		return this.label.getIcon();
	}

	/*******************************************************************************************************************
	 * Устанавливает текст
	 ******************************************************************************************************************/
	public void setText(String text) {
		this.label.setText(text);
		this.recenter();
	}

	/*******************************************************************************************************************
	 * Возвращает текст
	 ******************************************************************************************************************/
	public String getText() {
		return this.label.getText();
	}

	/*******************************************************************************************************************
	 * Устанавливает длительность показа
	 ******************************************************************************************************************/
	public void setDelay(long theDelay) {
		this.delay = theDelay;
	}

	/*******************************************************************************************************************
	 * Возвращает длительность показа
	 ******************************************************************************************************************/
	public long getDelay() {
		return this.delay;
	}

	/*******************************************************************************************************************
	 * Пакует и центрирует посередине окна
	 ******************************************************************************************************************/
	protected void recenter() {
		this.validateTree();
		this.setSize(this.label.getPreferredSize());
		GuiMisc.centerComponentToScreen(this);
	}

	/*******************************************************************************************************************
	 * Запускает заставку
	 ******************************************************************************************************************/
	@Override
    public void run() {
		this.setVisible(true);
		try {
			Thread.sleep(this.delay);
		} catch (Exception e) {
			// NOP
		}
		this.dispose();
	}
}
